# Dockerfile
# Docker会以从上到下的顺序运行Dockerfile里的指令。为了指定基本映像，第一条指令必须是FROM。一个声明以 ＃ 字符开头则被视为注释。

# FROM指令，指定构建新镜像时使用的基础镜像，通常必须是Dockerfile的第一个有效指令，但其前面也可以出现ARG指令
# 指定构建新镜像时使用nginx镜像的latest最新版本作为基础镜像。如果本地有nginx:latest镜像就直接使用本地的，如果没有就会从Docker Hub下载到本地存储并使用
FROM nginx:latest
# 设置维护者信息
LABEL MAINTAINER = "hoo"
# 拷贝项目静态资源。从主机系统，将当前目录下的dist目录里的所有目录和文件，复制到Docker的nginx镜像中的 /usr/share/nginx/html/dist/ 目录下
COPY dist/ /usr/share/nginx/html/dist/
# 拷贝ssl证书。从主机系统，将当前目录下的ssl目录里的所有目录和文件，复制到Docker的nginx镜像中的 /etc/nginx/ssl/ 目录下
COPY ssl/ /etc/nginx/ssl/
# 删除原有的default.conf配置文件，避免影响到本项目的nginx.conf文件的端口配置
# RUN rm /etc/nginx/conf.d/default.conf
# 拷贝nginx配置文件。从主机系统，将当前目录下的nginx.conf配置文件，复制到Docker的nginx镜像中的 /etc/nginx/conf.d/ 目录下
COPY nginx.conf /etc/nginx/conf.d/
# 设置时区，解决docker容器时间和系统时间不一致的问题的
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" >/etc/timezone
# 暴露出去的端口号(http)（不配置的话，nginx默认暴露80端口），即将nginx镜像监听的的80端口（上面nginx.conf配置的）暴露出去给docker，最终使用docker运行容器时可以将80端口的映射到主机的端口
# 注意：nginx有default.conf文件默认暴露80端口，如果想要监听80端口，需要修改或替换default.conf文件，不修改替换的话请监听其他端口。
# 注意：如果部署在80端口、443无法访问页面，更换其他非80、非443端口
# EXPOSE 80
EXPOSE 9001
# 暴露442端口号(https)
EXPOSE 442
# 启动Nginx并且Nginx将持续运行
CMD ["nginx", "-g", "daemon off;"]
# 输出完成提示
RUN echo "Build docker image ok!"

# Docker镜像由一些松耦合的只读镜像层组成，Docker负责堆叠这些镜像层，并且将它们表示为单个统一的对象。
# 镜像的每个层都是只读的，这意味着在构建后，镜像层的内容不会再改变，这种设计有助于镜像的高效性和可复用性。
